// 基础URL配置, data就是params参数
const storedBaseUrl = uni.getStorageSync('serverBaseUrl');
export const SERVER_BASE_URL = storedBaseUrl || "http://127.0.0.1:9001/";
export const BASE_URL = SERVER_BASE_URL + 'api/game/wzry/';

// 公共请求函数
export const request = (url, method, data = {}, headers = {}, showToast = false) => {

  return new Promise((resolve, reject) => {
    // 使用完整URL如果提供，否则使用BASE_URL
    const requestUrl = url.startsWith('http') || url.startsWith('/') ? url : BASE_URL + url;
    // 判断本地有没有userInfo
    const userInfo = uni.getStorageSync("userInfo");
    if (userInfo) {
      // 如果存在吧user_id放在请求头中
      headers['user-id'] = userInfo.user_id;
    }
    uni.request({
      url: requestUrl,
      method,
      data,
      header: {
       'Content-Type': 'application/x-www-form-urlencoded',    
        ...headers
      },
      timeout: 10000,
      success: (response) => {
        const { statusCode, data } = response;
        if (statusCode === 200) {
          // 统一处理成功响应
          if (data.code === 0) {
            
            resolve(data);
          } else {
            // 业务错误
            reject(data);
          }
        } else {
          // HTTP状态错误
       
          reject(response);
        }
      },
      fail: (error) => {
        // 网络错误或请求失败
      
        reject(error);
      },
      complete: (res) => {
        
        // 无论成功或失败
          if (showToast) {
          uni.showToast({
            title: res.data.message || '网络异常，请稍后重试',
            icon: 'error'
          });
        }
      }
    });
  });
};


// **************************
// 系统 > 用户
// **************************

/**
 * 用户登录
 * @param {Object} data - 请求参数
 * @param {string} data.username - 用户名（必填）
 * @param {string} data.password - 密码（必填）
 * @returns {Promise} - 包含登录结果的响应数据
 */
export const login = (data) => {
    // 判断data有没有username和password
    if (!data.username || !data.password) {
        return Promise.reject('用户名和密码不能为空');
    }
    return request(SERVER_BASE_URL + 'api/user/login/', 'POST', data);
};

/**
 * 搜索用户
 * @param {Object} data - 请求参数
 * @param {string} data.keyword - 搜索关键词（必填）
 * @returns {Promise} - 包含搜索用户结果的响应数据
 */
export const searchUser = (data) => {
    // 判断data有没有keyword
    if (!data.keyword) {
        return Promise.reject('搜索关键词不能为空');
    }
    return request(SERVER_BASE_URL + 'api/user/search_user/', 'POST', data);
};



/**
 * 获取用户信息
 * @returns {Promise} - 包含用户信息的响应数据
 */
export const getUserInfo = () => {
    return request(SERVER_BASE_URL + 'api/user/get_user_info/', 'POST');
};



// **************************
// 游戏 > 王者荣耀 > 订单
// **************************

/**
 * 获取订单列表
 * @param {Object} data - 请求参数
 * @param {string} data.order_source_id - 订单来源ID（必填）
 * @param {number} data.status - 状态码（可选）
 * @returns {Promise} - 包含订单列表的响应数据
 */
export const getOrderList = (params) => {
    
  return request('order/list/', 'GET', params);
};

/**
 * 获取单个订单详情
 * @param {Object} data - 请求参数
 * @param {string} data.order_id - 订单ID（必填）
 * @returns {Promise} - 包含订单详情的响应数据
 */
export const getOrderDetail = (params) => {
  return request('order/detail/', 'GET', params);
};

/**
 * 获取全部订单
 * @returns {Promise} - 包含全部订单的响应数据
 */
export const getAllOrders = () => {
  return request('order/all/', 'GET');
};

/**
 * 更新订单信息
 * @param {Object} data - 更新的数据
 * @param {string} data.order_id - 订单ID（必填）
 * @returns {Promise} - 包含更新结果的响应数据
 */
export const updateOrder = (data) => {
    // 判断data有没有order_id
    if (!data.order_id) {
        uni.showToast({
            title: '订单ID不能为空',
            icon: 'error'
        });
        return Promise.reject('订单ID不能为空');
    }
  return request('order/update/', 'POST',  data);
};

/**
 * 删除订单
 * @param {Object} data - 删除的订单信息
 * @param {string} data.order_id - 订单ID（必填）
 * @returns {Promise} - 包含删除结果的响应数据
 */
export const deleteOrder = (data) => {
  return request('order/delete/', 'POST', {}, data);
};

/**
 * 获取订单状态列表
 * @returns {Promise} - 包含订单状态列表的响应数据
 */
export const getOrderStatusList = () => {
  return request('order/status/list/', 'GET');
};



/**
 * 获取收入统计
 * @returns {Promise} - 包含收入统计的响应数据
 */
export const getOrderStatistics = () => {
  return request('order/statistics/', 'GET');
};

// **************************
// 游戏 > 王者荣耀 > 代练丸子
// **************************

/**
 * 获取我的余额
 * @returns {Promise} - 包含余额信息的响应数据
 */
export const getMyBalance = () => {
  return request('dlwz/GetMyBalance/', 'GET');
};

/**
 * 发布订单
 * @param {Object} data - 请求参数
 * @param {string} data.Title - 订单标题（必填）
 * @param {string} data.Amount - 订单金额（必填）
 * @param {string} data.GameRegionName - 游戏区域名称（必填，可选值：安卓QQ、安卓微信、苹果QQ、苹果微信）
 * @param {number} data.Hour - 代练时长（必填）
 * @param {string} data.OrderSourceID - 订单来源ID（必填）
 * @param {number} data.ReceivingMargin - 接单保证金（必填）
 * @param {number} data.ReceivingEfficiencyFee - 接单效率保证金（必填）
 * @param {string} data.OrderSourceName - 订单来源平台名称（可选，默认代练通）  
 * @returns {Promise} - 包含发布结果的响应数据
 */
export const publishOrder = (data) => {
  return request('dlwz/PublishOrder/', 'GET', data);
};

/**
 * 取消订单
 * @param {Object} data - 请求参数
 * @param {string} data.OrderID - 丸子订单ID（必填）
 * @returns {Promise} - 包含取消结果的响应数据
 */
export const cancelOrder = (data) => {
  return request('dlwz/CancelOrder/', 'GET', data);
};

/**
 * 获取订单列表-v2版本
 * @param {Object} data - 请求参数
 * @param {number} data.TableType - 订单类型（必填，可选值：0-全部, 1-待接单, 2-已接单, 3-已完成, 4-已取消，默认0）
 * @returns {Promise} - 包含订单列表的响应数据
 */
export const getOrderListV2 = (data) => {
  return request('dlwz/GetOrderList/', 'GET', data);  
};

// **************************
// 游戏 > 王者荣耀 > 代练通
// **************************

/**
 * 获取我接手的游戏订单
 * @returns {Promise} - 包含我接手的订单的响应数据
 */
export const getMyTakenOrders = () => {
  return request('dlt/GetMyTakenOrders/', 'GET');
};

/**
 * 获取用户信息列表
 * @returns {Promise} - 包含用户信息列表的响应数据
 */
export const getUserInfoList = () => {
  return request('dlt/UserInfoList/', 'GET');
};

/**
 * 获取游戏单子列表
 * @returns {Promise} - 包含游戏单子列表的响应数据
 */
export const getGameOrderList = () => {
  return request('dlt/GetGameOrderList/', 'GET');
};

/**
 * 获取游戏单子详情
 * @param {Object} data - 请求参数
 * @param {string} data.order_id - 订单ID（必填）
 * @returns {Promise} - 包含游戏单子详情的响应数据
 */
export const getGameOrderDetail = (params) => {
  return request('dlt/GetGameOrderDetail/', 'GET', params);
};

/**
 * 接收订单
 * @param {Object} data - 接收订单的数据
 * @returns {Promise} - 包含接收结果的响应数据
 */
export const acceptOrder = (data) => {
  return request('dlt/LevelOrderReceive/', 'GET', data);
};

/**
 * 获取订单号主信息
 * @param {Object} data - 请求参数
 * @param {string} data.OrderID - 订单ID（必填）
 * @returns {Promise} - 包含订单号主信息的响应数据
 */
export const getOrderOwnerInfo = (data) => {
  return request('dlt/LevelOrderOwnerInfo/', 'GET', data);
};

// **************************
// 版本管理
// **************************

/**
 * 创建版本
 * @param {Object} data - 版本信息
 * @param {string} data.version - 版本号
 * @param {number} data.status - 版本状态 (1: 最新, 0: 历史)
 * @param {string} data.download_url - 下载地址
 * @param {string} data.version_desc - 更新日志
 * @returns {Promise} - 包含创建结果的响应数据
 */
export const createVersion = (data) => {
  return request(SERVER_BASE_URL + 'api/version/create/', 'POST', data);
};

/**
 * 获取最新版本
 * @returns {Promise} - 包含最新版本信息的响应数据
 */
export const getLatestVersion = () => {
  return request(SERVER_BASE_URL + 'api/version/current/', 'GET');
};

// **************************
// 话题库
// **************************

/**
 * 创建话术分类
 * @param {Object} data - 请求参数
 * @param {string} data.name - 分类名称 (必填)
 * @returns {Promise} - 包含创建结果的响应数据
 */
export const createScriptCategory = (data) => {
  return request(SERVER_BASE_URL + 'api/script/category/create/', 'POST', data);
};

/**
 * 获取话术分类列表
 * @param {Object} data - 请求参数
 * @param {number} data.status - 分类状态 (可选, 1-正常, 2-禁用)
 * @param {string} data.sort_by - 排序字段 (可选, 支持name/-name/create_time/-create_time)
 * @param {number} data.page - 页码 (可选, 默认: 1)
 * @param {number} data.page_size - 每页数量 (可选, 默认: 10)
 * @returns {Promise} - 包含分类列表的响应数据
 */
export const getScriptCategoryList = (params) => {
  return request(SERVER_BASE_URL + 'api/script/category/list/', 'GET', params);
};

/**
 * 创建话题话术
 * @param {Object} data - 请求参数
 * @param {string} data.category_id - 分类ID (必填)
 * @param {string} data.content - 话术内容 (必填)
 * @returns {Promise} - 包含创建结果的响应数据
 */
export const createTopicScript = (data) => {
  return request(SERVER_BASE_URL + 'api/script/topic/create/', 'POST', data);
};

/**
 * 获取话题话术列表
 * @param {Object} data - 请求参数
 * @param {string} data.category_id - 分类ID (必填)
 * @param {number} data.page - 页码 (可选, 默认: 1)
 * @param {number} data.page_size - 每页数量 (可选, 默认: 10)
 * @returns {Promise} - 包含话题话术列表的响应数据
 */
export const getTopicScriptList = (params) => {
  return request(SERVER_BASE_URL + 'api/script/topic/list/', 'GET', params);
};

/**
 * 更新话术
 * @param {Object} data - 请求参数
 * @param {string} data.topic_id - 话术ID (必填)
 * @param {number} data.content - 话术内容
 * @returns {Promise} - 包含话题话术的响应数据
 */
export const updateTopicScript = (params) => {
  return request(SERVER_BASE_URL + 'api/script/topic/update/', 'POST', params);
};

/**
 * 删除话术
 * @param {Object} data - 请求参数
 * @param {string} data.script_id - 话术ID (必填)
 * @returns {Promise} - 返回状态码
 */
export const deleteTopicScript = (params) => {
  return request(SERVER_BASE_URL + 'api/script/topic/delete/', 'POST', params);
};





// **************************
// 用户 -> 账户中心
// **************************

/**
 * 创建账号
 * @param {Object} data - 请求参数
 * @param {string} data.username - 用户名 (必填)
 * @param {string} data.password - 密码 (必填)
 * @param {string} data.phone - 手机号 (必填)
 * @returns {Promise} - 包含创建结果的响应数据
 */
export const createAccount = (data) => {
  return request(SERVER_BASE_URL + 'api/account/create/', 'POST', data);
};

/**
 * 分配账号
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @param {string} data.owner_id - 角色ID (必填)
 * @returns {Promise} - 包含分配结果的响应数据
 */
export const assignAccount = (data) => {
  return request(SERVER_BASE_URL + 'api/account/assign/', 'POST', data);
};

/**
 * 查询全部账号
 * @param {number} data.page - 页码 (可选, 默认: 1)
 * @param {number} data.page_size - 每页数量 (可选, 默认: 10)
 * @param {string} data.status - 状态 (可选, assigned-已分配, unassigned-未分配)
 * @returns {Promise} - 包含账号列表的响应数据
 */
export const getAccountList = (params) => {
  return request(SERVER_BASE_URL + 'api/account/search/', 'GET', params);
};

/**
 * 搜索账号
 * @param {Object} data - 请求参数
 * @param {string} data.keyword - 用户名 (可选)
 * @param {string} data.status - 状态 (可选, assigned-已分配, unassigned-未分配)
 * @returns {Promise} - 包含搜索结果的响应数据
 */
export const searchAccount = (params) => {
  return request(SERVER_BASE_URL + 'api/account/search/', 'GET', params);
};

/**
 * 更新账号信息
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @returns {Promise} - 包含更新结果的响应数据
 */
export const updateAccount = (data) => {
  return request(SERVER_BASE_URL + 'api/account/update/', 'POST', data);
};

/**
 * 更新平台认证状态
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @param {string} data.platform_id - 平台ID (必填)
 * @param {string} data.is_real_name - 是否真实姓名 (必填, true/false)
 * @returns {Promise} - 包含更新结果的响应数据
 */
export const update_platform_real_name = (params) => {
  return request(SERVER_BASE_URL + 'api/account/update_platform_real_name/', 'POST', params);
};

/**
 * 更新实名
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @param {string} data.real_name - 真实姓名 (必填)
 * @param {string} data.id_card - 身份证号 (必填)
 * @returns {Promise} - 包含更新结果的响应数据
 */
export const update_real_name = (params) => {
  return request(SERVER_BASE_URL + 'api/account/update_real_name/', 'POST', params);
};



/**
 * 查询全部平台
 * @param {Object} data - 请求参数
 * @returns {Promise} - 包含平台列表的响应数据
 */
export const get_all_platforms = (params) => {
  return request(SERVER_BASE_URL + 'api/platform/get_all/', 'GET', params);
};



// **************************
// 用户 -> 平台账号
// **************************

/**
 * 获取注册的全部平台
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @returns {Promise} - 包含平台列表的响应数据
 */
export const get_registered_platforms = (params) => {
  return request(SERVER_BASE_URL + 'api/account/get_registered_platforms/', 'GET', params);
};

// 注册平台
/**
 * 注册账号到平台
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @param {string} data.platform_id - 平台ID (必填)
 * @returns {Promise} - 包含注册结果的响应数据
 */
export const register_account_to_platform = (params) => {
  return request(SERVER_BASE_URL + 'api/account/register_platform/', 'POST', params);
};


// **************************
// 用户 -> 反馈
// **************************
// 获取反馈列表
/**
 * 获取反馈列表
 * @param {Object} data - 请求参数
 * @returns {Promise} - 包含反馈列表的响应数据
 */
export const get_feedback_list = (params) => {
  return request(SERVER_BASE_URL + 'api/feedback/list/', 'GET', params);
};


// 创建反馈
/**
 * 创建反馈
 * @param {Object} data - 请求参数
 * @param {string} data.feedback_type - 反馈类型 (必填, 1-问题, 2-建议, 3-其他)
 * @param {string} data.content - 反馈内容 (必填)
 * @returns {Promise} - 包含创建结果的响应数据
 */
export const create_feedback = (params) => {
  return request(SERVER_BASE_URL + 'api/feedback/create/', 'POST', params);
};

// 上传反馈图片
/**
 * 上传反馈图片
 * @param {Object} data - 请求参数
 * @param {string} data.feedback_id - 反馈ID (必填)
 * @param {File} data.image - 图片文件 (必填)
 * @returns {Promise} - 包含上传结果的响应数据
 */
export const upload_feedback_image = (params) => {
  return request(SERVER_BASE_URL + 'api/feedback/upload_feedback_image/', 'POST', params);
};

// 处理反馈
/**
 * 处理反馈
 * @param {Object} data - 请求参数
 * @param {string} data.feedback_id - 反馈ID (必填)
 * @param {string} data.result - 处理内容 (可选)
 * @returns {Promise} - 包含处理结果的响应数据
 */
export const handle_feedback = (params) => {
  return request(SERVER_BASE_URL + 'api/feedback/handle/', 'POST', params);
};

// 更新平台运营状态
/**
 * 更新平台运营状态
 * @param {Object} data - 请求参数
 * @param {string} data.account_id - 账号ID (必填)
 * @param {string} data.platform_id - 平台ID (必填)
 * @param {string} data.status_code - 状态码 (必填, 1-正常, 2-停用)
 * @returns {Promise} - 包含更新结果的响应数据
 */
export const upload_platform_status = (params) => {
  return request(SERVER_BASE_URL + 'api/account/update_platform_status/', 'POST', params);
};
